package Dp;

import java.util.Scanner;

/**
 * @author ShadowLim
 * @create 2022-03-19-15:50
 */
public class _数字三角形 {

    /**
     * 一个案例过不去
     * @param args
     */
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int[][] dp = new int[n][n];
//        for(int i=0;i<n;i++) {
//            for(int j=0;j<=i;j++) {
//                dp[i][j] = scanner.nextInt();
//            }
//        }
//        // 统计走到每个位置的最大值
//        for(int i=1;i<n;i++) {
//            dp[i][0] += dp[i-1][0]; // 每行第一个元素只能由上一行的第一个元素走到
//            dp[i][i] += dp[i-1][i-1];   // 同理 每行最后一个元素只能由上一行的最后个元素走到
//        }
//        // 处理每一行除首尾元素外的其他位置可以得到的最大值
//        for(int i=2;i<n;i++) {
//            for(int j=1;j<i;j++) {
//                dp[i][j] += Math.max(dp[i-1][j-1], dp[i-1][j]);
//            }
//        }
//
//        int sum=0;
//        // 遍历最后一行的每个值 取出最大值
//        for(int i=0;i<n;i++) {
//            sum = Math.max(sum,dp[n-1][i]);
//        }
//        System.out.println(sum);
//        scanner.close();
//    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[][] arr = new int[N][N];
        int[][] dp = new int[N][N];
        for(int i=0;i<N;i++) {
            for(int j=0;j<=i;j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        sc.close();
        dp[0][0] = arr[0][0];
        for(int i=1;i<N;i++) {
            dp[i][0] = dp[i-1][0] + arr[i][0];
        }
        for(int i=1;i<N;i++) {
            for(int j=1;j<=i;j++) {
                dp[i][j] = arr[i][j] + Math.max(dp[i-1][j], dp[i-1][j-1]);
            }
        }

        if(N%2!=0) {
            System.out.println(dp[N-1][N/2]);
        }else {
            System.out.println(Math.max(dp[N-1][N/2], dp[N-1][N/2-1]));
        }
    }
}
